The present invention, in some embodiments thereof, relates to detecting software antipatterns, and, more specifically, but not exclusively, to detecting software antipatterns through statistical analysis.
As technology advances and software intensive application become more abundant, software development is being done by a rapidly growing number of programmers who may have limited experience and may not be fully familiar with proper software development practices. Moreover, a lot of software practices used in certain environments, for example, Object Oriented Programming (OOP), web and/or server, may not fit platforms and applications of other nature, for example mobile platforms and/or Internet of Things (IoT). However software development practices may often be migrated from one software development environment to another. This migration may not be optimal at best and ineffective and/or harmful at worst.
A software product presents a complete life cycle including development, debugging, integration, verification, deployment, upgrade and maintenance. Efficiently supporting this life cycle naturally requires a robust design which follows good engineering practices to avoid failures, make proper use of resources, allow for scalability and support maintenance. Identifying poor programming at an early stage of the development process presents multiple benefits, for example, improving software code with respect to functionality and/or robustness, reduce implementation resources and/or reduce costs during one or more of the software product life cycle.
There exists a core population of software design experts in each of the software development environment, for example, OOP, web, server, mobile and/or IoT who may be well aware of software patterns (software development practices) implemented within software code and may be able to identify antipatterns within this code. This common knowledge base may also recommend proper software programming patterns during the software development process.
It is therefore highly desirable to harness the knowledge base shared by the community of software development experts to create automated tools for identifying antipatterns in software products.